/*
 * 1、把函数仅当构造函数使用，不当作普通函数使用
 * 2、ES6提为new提供了target属性用来引用被调用的构造函数
 */

// 定义对象(同时也定义了构造函数)
function Loong(name){
    console.log( 'Loong executing' );
    // ECMAScript2015(俗称ES6)为new运算符提供了target属性
    // 通过 new.target 可以获得当前被调用的构造函数
    // console.log( new.target );
    if( new.target === undefined ) {
        // console.log( '以普通函数方式被调用' );
        throw new Error( '只能以构造函数方式来调用' );
    }
    // 定义属性并通过参数初始化属性
    this.name = name ;
}

// 使用new关键字结合构造函数来创建实例
// 此时在构造函数内部可以通过 new.target 获得正在执行的构造函数
let x = new Loong( '敖广' );
console.log( x );

console.log( '- - - - - - - - - - - - - - - - - -' );

// 作为普通函数来调用
Loong();